package com.piesat.quake.business.device.model;

import com.piesat.quake.business.device.mqtt.anno.CharField;
import com.piesat.quake.business.device.mqtt.anno.LengthField;
import com.piesat.quake.business.device.mqtt.anno.PipelineNode;

import java.util.List;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 实时数据报文
 * 设备上行 QoS0
 * @author Gersy
 * @date 2023/2/14
 * @since 1.0
 */
@EqualsAndHashCode(callSuper = true)
@Data
@PipelineNode(preNodes = {BaseModel.class})
public class RealtimeData extends BaseModel {
    //包序号	Int	4B	连续传输中的包序号
    private int number;
    //台网编号	Char	2B	台网代码，例如GD表示广东
    @CharField(2)
    private String NO;
    //位置标识符	Char	2B	台站的地震计编号
    @CharField(2)
    private String location;
    //通道标识符	Char	1B	0表示3振动模式；
    //1表示6振动模式；
    //2表示9振动模式。
    @CharField(1)
    private String mode;
    //样本数目	Short	2B	每个数据包中单个通道的采样点的个数
    private short samplingCount;
    //采样率	Short	2B	数据采样率
    private short samplingRate;
    //数据块		nB	实时数据块，根据通道标识符，数据块个数有差异，通常一个数据块表示一个通道的实时数据；


    @Data
    public static class BlockData{
        //数据块编号	Byte	1B	当前数据块编号，从1开始编号
        private byte number;
        //下一个数据块编号	Byte	1B	指示下一个数据块编号，若为0，表示后续无数据块
        private byte nextNumber;
        //数据块长度	Int	4B	包含编号在内的，整个数据块的长度
        @LengthField
        private byte length;
        //通道ID	Byte	1B	通道编号，从1开始编号
        private byte passagewayId;
        //状态	Byte	1B	表征该通道数据是否超过设定阈值；
        //0表示该数据块没有超过地震阈值的数据；
        //1表示该数据块有超过地震阈值的数据（即阈值法触发）；
        private byte state;
        //值0	Float	4B	数据块中的第0个数据
        //...	Float	4B	...
        //值n	Float	4B	数据块中的第n个数据

        private List<Float> datas;
    }



}
